JSONL ファイルをもとに Amazon Athena で INSERT INTO してみる
こんにちは!よしななです。
今回は、前回の投稿で作成したjsonl_test_table
をもとに新規作成したjsonl_test_table_insert
に、INSERT INTO
を使用してデータを追加してみます。
目次
- やりたいこと
- 事前準備
- 手順
- INSERT INTO 用テーブルの作成
- INSERT INTO の実行
- 実行結果の確認
やりたいこと
- 前回の投稿で作成した
jsonl_test_table
をもとに新規作成したjsonl_test_table_insert
に、INSERT INTO
を実行してデータを追加するところまでを実施します。 - 元テーブルのうち、
Gender
カラムがFemale
のレコード(行)をjsonl_test_table_insert
に追加するクエリを作成し、実行するところまでを試します。
事前準備
前回の記事の事前準備と同様に、以下の5点を実施します。
手順
INSERT INTO 用テーブルの作成
事前準備が完了したら、INSERT INTO
用のテーブルを作成していきます。
以下のCREATE TABLE
クエリを実行し、空のjsonl_test_table_insert
テーブルを作成します。
CREATE EXTERNAL TABLE IF NOT EXISTS jsonl_test_table_insert( `no` int, `name` string, `gender` string, `grades` struct<japanese:int,math:int,english:int,science:int,socialstudies:int>) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' LOCATION 's3://jsonl-test/empty/'
CREATE TABLE クエリ構文について
1.org.apache.hive.hcatalog.data.JsonSerDe について
AWS 公式ドキュメントによると、Amazon Athena でINSERT INTO
する場合、ROW FORMAT SERDE org.openx.data.jsonserde.JsonSerDe
はサポート外となっているため、jsonl_test_table_insert
テーブル作成時は ROW FORMAT SERDE をorg.apache.hive.hcatalog.data.JsonSerDe
に設定する必要があります。
参考公式ドキュメント:https://docs.aws.amazon.com/ja_jp/athena/latest/ug/insert-into.html#insert-into-limitations
2.空テーブル作成について
データを含まないテーブルを作成したい場合、LOCATION
で指定する S3 バケットを空にしておきます。
今回は S3 バケット/jsonl-test
配下に/empty
フォルダを作成しました。
こちらでjsonl_test_table_insert
テーブルが作成できたので、INSERT INTO
をしてデータを追加していきます。
INSERT INTO の実行
それでは、INSERT INTO
でデータを追加していきます。
元テーブルのうち、Gender
カラムがFemale
のレコード(行)をjsonl_test_table_insert
に追加します。
以下のクエリを実行します。
INSERT INTO "jsonl_test_table_insert" SELECT "no", "name", "gender", "grades" FROM "jsonl_test"."jsonl_test_table" WHERE gender='Female';
INSERT INTO クエリ構文について
1.INSERT INTO
INSERT INTO テーブル名
でデータを登録するテーブル名を指定します。
2.SELECT FROM
- テーブルに追加するカラムを指定します。
SELECT
クエリがテーブル列を指定する場会、カラム名の順番を一致させる必要があります。- 今回は、
no,name,gender,grades
の順で指定します。
3.WHERE
- こちらで、追加するテーブルの条件を指定しています。
- 元テーブルのうち、
Gender
カラムがFemale
のレコード(行)をjsonl_test_table_insert
に追加したいので、gender='Female'
を指定します。
実行結果の確認
INSERT INTO
クエリが実行できたので、以下のコードを実行しテーブルの中身を確認してみます。
SELECT * FROM "jsonl_test"."jsonl_test_table_insert" limit 10;
jsonl_test_table_insert
テーブルに、Gender
がFemale
のカラムのみが追加されたのを確認できました!以上で、JSONL ファイルをもとに Amazon Athena でINSERT INTO
してみる は完了となります。
ここまで読んでいただきありがとうございました!